home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HAM Radio 3.2
/
Ham Radio Version 3.2 (Chestnut CD-ROMs)(1993).ISO
/
packet
/
n17jsrc
/
netuser.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-02-05
|
3KB
|
145 lines
/* Miscellaneous interger and IP address format conversion subroutines
* Copyright 1991 Phil Karn, KA9Q
*/
#define LINELEN 256
#include <ctype.h>
#include <stdio.h>
#include "global.h"
#include "netuser.h"
#include "domain.h"
int Net_error;
/* Convert Internet address in ascii dotted-decimal format (44.0.0.1) to
* binary IP address
*/
int32
aton(s)
register char *s;
{
int32 n;
register int i;
n = 0;
if(s == NULLCHAR)
return 0;
for(i=24;i>=0;i -= 8){
/* Skip any leading stuff (e.g., spaces, '[') */
while(*s != '\0' && !isdigit(*s))
s++;
if(*s == '\0')
break;
n |= (int32)atoi(s) << i;
if((s = strchr(s,'.')) == NULLCHAR)
break;
s++;
}
return n;
}
/* Convert an internet address (in host byte order) to a dotted decimal ascii
* string, e.g., 255.255.255.255\0
*/
char *
inet_ntoa(a)
int32 a;
{
static char buf[80];
char *name;
if(DTranslate && (name = resolve_a(a,!DVerbose)) != NULLCHAR) {
strcpy(buf, name);
free(name);
} else {
sprintf(buf,"%u.%u.%u.%u",
hibyte(hiword(a)),
lobyte(hiword(a)),
hibyte(loword(a)),
lobyte(loword(a)) );
}
return buf;
}
/* Convert hex-ascii string to long integer */
long
htol(s)
char *s;
{
long ret;
char c;
ret = 0;
while((c = *s++) != '\0'){
c &= 0x7f;
if(c == 'x')
continue; /* Ignore 'x', e.g., '0x' prefixes */
if(c >= '0' && c <= '9')
ret = ret*16 + (c - '0');
else if(c >= 'a' && c <= 'f')
ret = ret*16 + (10 + c - 'a');
else if(c >= 'A' && c <= 'F')
ret = ret*16 + (10 + c - 'A');
else
break;
}
return ret;
}
char *
pinet(s)
struct socket *s;
{
static char buf[80];
char port[10];
switch(s->port) {
case 7: /* Echo data port */
sprintf(port,"echo");
break;
case 9: /* Discard data port */
sprintf(port,"discard");
break;
case 20: /* FTP Data port */
sprintf(port,"ftpd");
break;
case 21: /* FTP Control port */
sprintf(port,"ftp");
break;
case 23: /* Telnet port */
sprintf(port,"telnet");
break;
case 25: /* Mail port */
sprintf(port,"smtp");
break;
case 53: /* Domain Nameserver */
sprintf(port,"domain");
break;
case 69: /* TFTP Data port */
sprintf(port,"tftpd");
break;
case 79: /* Finger port */
sprintf(port,"finger");
break;
case 87: /* Ttylink port */
sprintf(port,"ttylink");
break;
case 109: /* POP port */
sprintf(port,"pop");
break;
case 119: /* NNTP port */
sprintf(port,"nntp");
break;
case 520: /* Routing Information Protocol */
sprintf(port,"rip");
break;
case 1234: /* Pulled out of the air */
sprintf(port,"remote");
break;
default:
sprintf(port,"%u",s->port);
break;
}
sprintf(buf,"%s:%s",inet_ntoa(s->address),port);
return buf;
}